
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Caja here.
 * 
 * @author Andrés Cruz Santiago
 * @version 04/07/13
 */
public class Caja extends Obstaculo
{
    private Heroe hr;
    private Heroe arr;
    private Heroe aba;
    private Heroe der;
    private Heroe izq;
    private int pasos=20;//Medida de la caja
    /**
     * Act - do whatever the Caja wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public Caja(Heroe unHeroe)
    {
        hr=unHeroe;
    }

    public void act() 
    {

        aba=(Heroe)this.getOneObjectAtOffset(0,9,Heroe.class);//Checa si el Heroe esta abajo 
        arr=(Heroe)this.getOneObjectAtOffset(0,-9,Heroe.class);//Checa si el Heroe esta Arriba
        der=(Heroe)this.getOneObjectAtOffset(9,0,Heroe.class);//Checa si el Heroe esta a la Derecha
        izq=(Heroe)this.getOneObjectAtOffset(-10,0,Heroe.class);//Checa si el Heroe esta a la Izquierda
        //Actor l3=
        // Actor l2= getOneIntersectingObject(Obstaculo.class);
        //Actor l3=
        // if(l2==null)
        //{
        mover();
        // }
        /* else 
        {
        if(aba!=null)
        this.setLocation(this.getX(),this.getY()+15);
        if(arr!=null)
        this.setLocation(this.getX(),this.getY()-15);
        if(der!=null)
        this.setLocation(this.getX()+15,this.getY());
        if(izq!=null)
        this.setLocation(this.getX()-15,this.getY());
        l2=null;
        }*/
        todoNull();//reinicia las varibales de instancia que detectan al jugador
    }
    /**
     * Mueve la Caja si no hay un Ostaculo frente a ella
     */
    public void mover()
    {
        int direcciones=Checa();
        switch(direcciones)
        {
            case 1://Movimiento en el eje X

            if(der!=null)//Mueve la caja hacia la izquierda
                this.setLocation(this.getX()-pasos,this.getY());
            if(izq!=null)//Mueve la caja hacia la Derecha
                this.setLocation(this.getX()+pasos,this.getY());

            break;
            case 2: //Movimiento en el Eje Y

            if(aba!=null)//Mueve la Caja hacia Arriba
                this.setLocation(this.getX(),this.getY()-pasos);
            if(arr!=null)//Mueve la Caja hacia Abajo
                this.setLocation(this.getX(),this.getY()+pasos);
            break;
            case 3://Movimiento en el eje X y Y

            if(aba!=null)//Mueve la Caja hacia Arriba
                this.setLocation(this.getX(),this.getY()-pasos);
            if(arr!=null)//Mueve la Caja hacia Abajo
                this.setLocation(this.getX(),this.getY()+pasos);
            if(der!=null)//Mueve la caja hacia la izquierda
                this.setLocation(this.getX()-pasos,this.getY());
            if(izq!=null)//Mueve la caja hacia la Derecha
                this.setLocation(this.getX()+pasos,this.getY());

            break;
        }
    }

    public void todoNull()
    {
        arr=null;
        aba=null;
        der=null;
        izq=null;
    }
    
    public void elimina()
    {
      removeTouching(BalaMedusa.class);  
    }

        public int Checa()
    {   
        int band=0;
        Actor Xpos=null;
        Xpos=this.getOneObjectAtOffset(22,0,Obstaculo.class);
        Actor Xneg=null;
        Xneg=this.getOneObjectAtOffset(-22,0,Obstaculo.class);
        Actor Ypos=null;
        Ypos=this.getOneObjectAtOffset(0,22,Obstaculo.class);
        Actor Yneg=null;
        Yneg=this.getOneObjectAtOffset(0,-22,Obstaculo.class);
        Actor XposT=null;
        XposT=this.getOneObjectAtOffset(22,0,Tangible.class);
        Actor XnegT=null;
        XnegT=this.getOneObjectAtOffset(-22,0,Tangible.class);
        Actor YposT=null;
        YposT=this.getOneObjectAtOffset(0,22,Tangible.class);
        Actor YnegT=null;
        YnegT=this.getOneObjectAtOffset(0,-22,Tangible.class);
        if( (Xpos==null && Xneg==null) &&(XposT==null && XnegT==null))
        {
            //se puede mover en todo el eje X
            band=1;
        }
        if( (Ypos==null && Yneg==null) && (YposT==null && YnegT==null) )
        {
            //se puede mover en todo el eje Y
            band=2;
        }
        if( ( (Xpos==null && Xneg==null )&& ( Ypos==null && Yneg==null) ) && ( (XposT==null && XnegT==null )&& ( YposT==null && YnegT==null) ))
        {
            //se puede mover en X y en Y
            band=3;
        }
        return band;
    }
}
